//2. 编程题
//
//        a. 使用线程池将一个目录中的所有内容拷贝到另外一个目录中，包含子目录中的内容。
//
//        b.实现将指定目录中的所有内容删除，包含子目录中的内容都要全部删除。


        package homework1_2;
import java.io.File;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolCopyTest {

    static ExecutorService executorService = Executors.newCachedThreadPool();
    //递归+多线程的方式拷贝目录
    private static void fileCopy(String fileFrom, String fileTo) {
        if(fileFrom.equalsIgnoreCase(fileTo)) return;
        File f1 = new File(fileFrom);
        File f2 = new File(fileTo);
        if(!f1.exists()) return;    //如果源文件不存在则直接退出
        if(!f2.exists()) f2.mkdirs(); //如果目标目录不存在则新建目录
        File[] files = f1.listFiles();
        //遍历目录中的元素
        for(File tf : files) {
            if(tf.isFile()) {    //文件
                executorService.submit(new ThreadPoolCopy(fileFrom+"/"+tf.getName(), fileTo+"/"+tf.getName()));
            } else if(tf.isDirectory()) {  //子目录
                executorService.submit(new ThreadPoolCopy(fileFrom+"/"+tf.getName(), fileTo+"/"+tf.getName())); // 开辟新线程拷贝目录
                fileCopy(fileFrom+"/"+tf.getName(), fileTo+"/"+tf.getName());    //随后拷贝目录中的文件
            }
        }
    }

    public static void main(String[] args){
        String fileFrom = "F:/TEST";
        String fileTo = "F:/测试";
        fileCopy(fileFrom, fileTo);
    }
}